GskGLProfiler *gl_profiler;
GskShaderBuilder *shader_builder;
- int gl_min_filter;
- int gl_mag_filter;
-
int blend_program_id;
int blit_program_id;
}
static void
-get_gl_scaling_filters (GskRenderer *renderer,
- int *min_filter_r,
- int *mag_filter_r)
+get_gl_scaling_filters (GskRenderNode *node,
+ int *min_filter_r,
+ int *mag_filter_r)
{
- GskScalingFilter min_filter, mag_filter;
-
- gsk_renderer_get_scaling_filters (renderer, &min_filter, &mag_filter);
-
- switch (min_filter)
+ switch (node->min_filter)
{
case GSK_SCALING_FILTER_NEAREST:
*min_filter_r = GL_NEAREST;
break;
}
- switch (mag_filter)
+ switch (node->mag_filter)
{
case GSK_SCALING_FILTER_NEAREST:
*mag_filter_r = GL_NEAREST;
else if (gsk_render_node_has_surface (node))
{
cairo_surface_t *surface = gsk_render_node_get_surface (node);
+ int gl_min_filter = GL_NEAREST, gl_mag_filter = GL_NEAREST;
+
+ get_gl_scaling_filters (node, &gl_min_filter, &gl_mag_filter);
/* Upload the Cairo surface to a GL texture */
item.render_data.texture_id = gsk_gl_driver_create_texture (self->gl_driver,
gsk_gl_driver_init_texture_with_surface (self->gl_driver,
item.render_data.texture_id,
surface,
- self->gl_min_filter,
- self->gl_mag_filter);
+ gl_min_filter,
+ gl_mag_filter);
}
else
{
gsk_gl_renderer_update_frustum (self, &modelview, &projection);
- get_gl_scaling_filters (GSK_RENDERER (self),
- &self->gl_min_filter,
- &self->gl_mag_filter);
if (!gsk_gl_renderer_validate_tree (self, root, &projection))
goto out;
enum {
PROP_VIEWPORT = 1,
- PROP_MINIFICATION_FILTER,
- PROP_MAGNIFICATION_FILTER,
PROP_AUTO_CLEAR,
PROP_USE_ALPHA,
PROP_SCALE_FACTOR,
gsk_renderer_set_viewport (self, g_value_get_boxed (value));
break;
- case PROP_MINIFICATION_FILTER:
- gsk_renderer_set_scaling_filters (self, g_value_get_enum (value), priv->mag_filter);
- break;
-
- case PROP_MAGNIFICATION_FILTER:
- gsk_renderer_set_scaling_filters (self, priv->min_filter, g_value_get_enum (value));
- break;
-
case PROP_AUTO_CLEAR:
gsk_renderer_set_auto_clear (self, g_value_get_boolean (value));
break;
g_value_set_boxed (value, &priv->viewport);
break;
- case PROP_MINIFICATION_FILTER:
- g_value_set_enum (value, priv->min_filter);
- break;
-
- case PROP_MAGNIFICATION_FILTER:
- g_value_set_enum (value, priv->mag_filter);
- break;
-
case PROP_AUTO_CLEAR:
g_value_set_boolean (value, priv->auto_clear);
break;
G_PARAM_STATIC_STRINGS |
G_PARAM_EXPLICIT_NOTIFY);
- /**
- * GskRenderer:minification-filter:
- *
- * The filter to be used when scaling textures down.
- *
- * See also: gsk_renderer_set_scaling_filters()
- *
- * Since: 3.22
- */
- gsk_renderer_properties[PROP_MINIFICATION_FILTER] =
- g_param_spec_enum ("minification-filter",
- "Minification Filter",
- "The minification filter used by the renderer for texture targets",
- GSK_TYPE_SCALING_FILTER,
- GSK_SCALING_FILTER_LINEAR,
- G_PARAM_READWRITE |
- G_PARAM_STATIC_STRINGS |
- G_PARAM_EXPLICIT_NOTIFY);
-
- /**
- * GskRenderer:magnification-filter:
- *
- * The filter to be used when scaling textures up.
- *
- * See also: gsk_renderer_set_scaling_filters()
- *
- * Since: 3.22
- */
- gsk_renderer_properties[PROP_MAGNIFICATION_FILTER] =
- g_param_spec_enum ("magnification-filter",
- "Magnification Filter",
- "The magnification filter used by the renderer for texture targets",
- GSK_TYPE_SCALING_FILTER,
- GSK_SCALING_FILTER_LINEAR,
- G_PARAM_READWRITE |
- G_PARAM_STATIC_STRINGS |
- G_PARAM_EXPLICIT_NOTIFY);
-
/**
* GskRenderer:auto-clear:
*
priv->auto_clear = TRUE;
priv->scale_factor = 1;
-
- priv->min_filter = GSK_SCALING_FILTER_LINEAR;
- priv->mag_filter = GSK_SCALING_FILTER_LINEAR;
}
/**
graphene_rect_init_from_rect (viewport, &priv->viewport);
}
-/**
- * gsk_renderer_set_scaling_filters:
- * @renderer: a #GskRenderer
- * @min_filter: the minification scaling filter
- * @mag_filter: the magnification scaling filter
- *
- * Sets the scaling filters to be applied when scaling textures
- * up and down.
- *
- * Since: 3.22
- */
-void
-gsk_renderer_set_scaling_filters (GskRenderer *renderer,
- GskScalingFilter min_filter,
- GskScalingFilter mag_filter)
-{
- GskRendererPrivate *priv = gsk_renderer_get_instance_private (renderer);
- GObject *gobject;
-
- g_return_if_fail (GSK_IS_RENDERER (renderer));
-
- gobject = G_OBJECT (renderer);
-
- g_object_freeze_notify (gobject);
-
- if (priv->min_filter != min_filter)
- {
- priv->min_filter = min_filter;
- g_object_notify_by_pspec (gobject, gsk_renderer_properties[PROP_MINIFICATION_FILTER]);
- }
-
- if (priv->mag_filter != mag_filter)
- {
- priv->mag_filter = mag_filter;
- g_object_notify_by_pspec (gobject, gsk_renderer_properties[PROP_MAGNIFICATION_FILTER]);
- }
-
- g_object_thaw_notify (gobject);
-}
-
-/**
- * gsk_renderer_get_scaling_filters:
- * @renderer: a #GskRenderer
- * @min_filter: (out) (nullable): return location for the minification filter
- * @mag_filter: (out) (nullable): return location for the magnification filter
- *
- * Retrieves the minification and magnification filters used by the #GskRenderer.
- *
- * Since: 3.22
- */
-void
-gsk_renderer_get_scaling_filters (GskRenderer *renderer,
- GskScalingFilter *min_filter,
- GskScalingFilter *mag_filter)
-{
- GskRendererPrivate *priv = gsk_renderer_get_instance_private (renderer);
-
- g_return_if_fail (GSK_IS_RENDERER (renderer));
-
- if (min_filter != NULL)
- *min_filter = priv->min_filter;
-
- if (mag_filter != NULL)
- *mag_filter = priv->mag_filter;
-}
-
/**
* gsk_renderer_set_scale_factor:
* @renderer: a #GskRenderer